﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace MyyntiLaskin
{
    [XmlRoot("myynti")]
    public class Myynti
    {
        public Myynti()
        {
            Myyntitapahtumat = new List<Myyntitapahtuma>();
            Asiakkaat = new List<Asiakas>();
        }

        [XmlElement("myyntitapahtuma")]
        public List<Myyntitapahtuma> Myyntitapahtumat { get; set; }

        [XmlIgnore]
        public List<Asiakas> Asiakkaat { get; private set; }

        public static void SaveToXml(string filename, Myynti myynti)
        {
            using (var sw = new StreamWriter(filename)) {
                XmlSerializerNamespaces xns = new XmlSerializerNamespaces();
                xns.Add("", "");

                XmlTextWriter xtw = new XmlTextWriter(sw);
                xtw.Formatting = Formatting.Indented;

                XmlSerializer xs = new XmlSerializer(typeof(Myynti));
                xs.Serialize(xtw, myynti, xns);
            }
        }

        public static Myynti LoadFromXml(string filename)
        {
            object obj;

            using (var sr = new StreamReader(filename)) {
                XmlTextReader xtr = new XmlTextReader(sr);

                XmlSerializer xs = new XmlSerializer(typeof(Myynti));
                obj = xs.Deserialize(xtr);
            }

            if (obj == null)
                return null;

            var myynti = (Myynti)obj;
            var customers = myynti.Myyntitapahtumat.Select(s => s.Asiakas).Distinct();
            foreach (var customer in customers) {
                var totalProducts = myynti.Myyntitapahtumat.Where(p => p.Asiakas == customer).Sum(s => s.Kpl);
                var totalSales = myynti.Myyntitapahtumat.Where(p => p.Asiakas == customer).Sum(s => s.Hinta * s.Kpl);
                myynti.Asiakkaat.Add(new Asiakas {
                    Nimi = customer,
                    TuotteitaYhteensa = totalProducts,
                    MyynnitYhteensa = totalSales,
                });
            }

            return myynti;
        }
    }
}
